import Crypto from "crypto-js";
import {
	Base64
} from "js-base64";
// import { toast } from "@/utils/utils";
// // import config from "@/config/index";
// import {
// 	Crypto,
// 	Base64
// } from '@/utils/bundle.js'; //引入上面的代码
// import {
// 	v4 as uuidV4
// } from "uuid";

const env = {
	EndPoint: "https://mifengcar.oss-cn-hangzhou.aliyuncs.com/", // 默认存在根目录，可根据需求改
	AccessKeyId: "LTAI5tH1jKmQFXTKxJSdE3QL", // AccessKeyId
	SecretKey: "6rmd9QltWlw21i7Qm1cP4EKRjo3CdN", // SecretKey
	timeout: 87600, //这个是上传文件时Policy的失效时间
	directory: "images",
};

function getPolicyBase64() {
	const date = new Date()
	date.setHours(date.getHours() + env.timeout)
	const expirationTime = date.toISOString()
	const policyText = {
		expiration: expirationTime, // 设置该Policy的失效时间，超过这个失效时间之后，就没有办法通过这个policy上传文件了
		conditions: [
			['content-length-range', 0, 2000 * 1024 * 1024], // 设置上传文件的大小限制,2G
		],
	}
	return Base64.encode(JSON.stringify(policyText))
}
const getSignature = function(policyBase64) {
	const bytes = Crypto.HmacSHA1(policyBase64, env.SecretKey)
	return Crypto.enc.Base64.stringify(bytes)
}

function uploadFile(filePath, suffix = '.png', dir = 'app/image/', showLoading = true) {
	return new Promise((resolve, reject) => {
		if (!filePath) {
			return uni.showToast({
				title: '图片错误,请重试'
			})
		} // 图片名字 可以自行定义，这里是采用当前的时间戳 + 150内的随机数来给图片命名的
		const fileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + suffix

		const aliyunServerURL = env.EndPoint // OSS地址，需要https
		const policyBase64 = getPolicyBase64()
		const signature = getSignature(policyBase64) // 获取签名
		uni.uploadFile({
			url: aliyunServerURL, // 开发者服务器 url
			filePath: filePath, // 要上传文件资源的路径
			name: 'file', // 必须填file
			formData: {
				key: fileKey,
				policy: policyBase64,
				OSSAccessKeyId: env.AccessKeyId,
				signature: signature,
				success_action_status: '200',
			},
			success: function(res) {
				console.log(res)
				if (res.statusCode !== 200) {
					reject(new Error('上传错误:' + JSON.stringify(res)))
					return
				}
				resolve(aliyunServerURL + fileKey)
				console.log(aliyunServerURL + fileKey);
			},
			fail: function(err) {
				console.log(err)
				reject(err)
			},
		})
		// let date = new Date(new Date().getTime() + 1000 * 3600);
		// let expiration = date.toISOString();
		// //let expiration = date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate()+'T'+date.getHours()+':'+date.getMinutes()+':00.000Z';
		// let policyText = {
		// 	expiration, //设置该Policy的失效时间，超过这个失效时间之后，就没有办法通过这个policy上传文件了
		// 	"conditions": [
		// 		["content-length-range", 0, 1048576000] // 设置上传文件的大小限制
		// 	]
		// };
		// let bucketName = 'mifengcar'; //你的bucketName
		// let policyBase64 = Base64.encode(JSON.stringify(policyText))
		// let accessid = env.AccessKeyId; //你的阿里oss accessid
		// let accesskey = env.SecretKey; //你的阿里oss secret
		// let host = env.EndPoint; //上传oss地址,注意地区对不对,我这示例给的是shanghai
		// let bytes = Crypto.default.HMAC(Crypto.default.SHA1, policyBase64, accesskey, {
		// 	asBytes: true
		// });
		// let signature = Crypto.default.util.bytesToBase64(bytes); //签名
		// // 在阿里云存储路径=>文件地址,地址根据公司或本人要求生成，下方仅为示例
		// let fileName = 'App/' + '示例20230320,可以自定义方法获取当天的日期' + '/' + '示例随机字符串,可以随机生成32位字符串' + '.' + path.split('.')
		// 	.pop(); //文件名 注意：相同文件名会覆盖之前的文件
		// if (showLoading) uni.showLoading({
		// 	mask: true,
		// 	title: '上传中..'
		// })
		// uni.uploadFile({
		// 	url: host,
		// 	filePath: path,
		// 	fileType: '',
		// 	name: 'file',
		// 	formData: {
		// 		name: fileName,
		// 		key: fileName, //文件名
		// 		policy: policyBase64, // 输入你获取的的policy
		// 		OSSAccessKeyId: accessid, // 输入你的AccessKeyId
		// 		success_action_status: '200', // 让服务端返回200,不然，默认会返回204
		// 		signature, // 输入你获取的的signature
		// 	},
		// 	success: (res) => {
		// 		if (showLoading) uni.hideLoading()
		// 		res.file = host + '/' + fileName
		// 		resolve(res)
		// 	},
		// 	fail: (res) => {
		// 		if (showLoading) uni.hideLoading()
		// 		reject(false)
		// 	}
		// })
	})
};
export default uploadFile;